#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
typedef double db;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); }
	while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+ch-'0'; ch=getchar(); }
	return x*f;
}
const int MAXN=1510;
int n,m,k,pre[MAXN][MAXN],a[MAXN][MAXN],b[MAXN][MAXN],c[MAXN][MAXN],d[MAXN][MAXN],ans;
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		{
			int x;scanf("%d",&x);
			pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+x;
		}
	for(int i=n;i>=k;--i)
		for(int j=m;j>=k;--j)
			pre[i][j]-=pre[i-k][j]+pre[i][j-k]-pre[i-k][j-k];

	for(int i=k;i<=n;++i)
		for(int j=k;j<=m;++j)
			a[i][j]=max(pre[i][j],max(a[i-1][j],a[i][j-1]));
	for(int i=k;i<=n;++i)
		for(int j=m;j>=k;--j)
			b[i][j]=max(pre[i][j],max(b[i-1][j],b[i][j+1]));
	for(int i=n;i>=k;--i)
		for(int j=k;j<=m;++j)
			c[i][j]=max(pre[i][j],max(c[i+1][j],c[i][j-1]));
	for(int i=n;i>=k;--i)
		for(int j=m;j>=k;--j)
			d[i][j]=max(pre[i][j],max(d[i+1][j],d[i][j+1]));

	for(int i=k;i<=n-k;++i)
		for(int j=k;j<=m-k;++j)
			ans=max(ans,a[i][j]+b[i][j+k]+c[i+k][m]);
	for(int i=k;i<=n-k;++i)
		for(int j=k;j<=m-k;++j)
			ans=max(ans,a[i][m]+c[i+k][j]+d[i+k][j+k]);
	for(int i=k;i<=n-k;++i)
		for(int j=k;j<=m-k;++j)
			ans=max(ans,a[i][j]+c[i+k][j]+b[n][j+k]);
	for(int i=k;i<=n-k;++i)
		for(int j=k;j<=m-k;++j)
			ans=max(ans,a[n][j]+b[i][j+k]+d[i+k][j+k]);

	for(int i=k+k;i<=n-k;++i)
		for(int j=k;j<=m;++j)
			ans=max(ans,a[i-k][m]+pre[i][j]+c[i+k][m]);
	for(int i=k;i<=n;++i)
		for(int j=k+k;j<=m-k;++j)
			ans=max(ans,a[n][j-k]+pre[i][j]+b[n][j+k]);
	printf("%d\n",ans);
	return 0;
}
